package com.pb.metadata.mapper;

import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * 码值管理模块
 * @author liurongjun
 * @date 2021/02/22
 */
@Mapper
@Repository
public interface MateCodeValueMapper {

    /**
     * 分页查询
     *
     * @param   paramMap 查询参数
     * @return
     */
    List<Map<String, Object>> selectByPage(Map<String, Object> paramMap);

    /**
     * 获取存放类型
     *
     * @return
     */
    List<Map<String,Object>> getCodeStoreList();

    /**
     * 获取数据类型
     *
     * @return
     */
    List<Map<String,Object>> getDataStoreList();

    /**
     * 获取数据表
     *
     * @return
     */
    List<Map<String,Object>> getCodeTableList();

    /**
     * 查询码值自增标识
     *
     * @return
     */
    String maxCodeTypeId();

    /**
     * 查询是否唯一约束
     *
     * @param paramMap
     * @return
     */
    Map<String, Object> selectConstraits(Map<String, Object> paramMap);

    /**
     * 保存
     *
     * @param paramMap
     */
    void insert(Map<String, Object> paramMap);

    /**
     * 查询子节点
     *
     * @param  paramMap 请求参数
     */
    List<Map<String, Object>> selectChildren(Map<String, Object> paramMap);

    /**
     * 修改
     * @param paramMap 修改参数
     */
    void update(Map<String, Object> paramMap);

    /**
     * 删除
     * @param map 码值标识List
     */
    void delete(Map<String, Object> map);

    void deleteCodeByType(Map<String, Object> paramMap);

    /**
     * 启动/停用
     * @param paramMap 码值标识集合
     */
    void startOrStop(Map<String,Object> paramMap);

    /**
     * 锁定
     *
     * @param map 码值标识List
     */
    void lockedDate(List<String> map);

    /**
     * 空闲
     *
     * @param map 码值标识List
     */
    void freeDate(List<String> map);

    /**
     * 获取表名
     *
     * @param map 码值类型
     * @return
     */
    String getTableName(Map<String, Object> map);

    /**
     * 查询对应码值的树形数据
     *
     * @param map 请求参数
     * @return
     */
    List<Map<String,Object>> getIterDataList(Map<String, Object> map);

    /**
     * 迁移码表
     *
     * @param map  迁移码值
     */
    void removeIterData(Map<String, Object> map);

    /**
     * 获取自增码值标识
     *
     * @param paramMap 请求参数
     * @return
     */
    String selectMaxCodeId(Map<String, Object> paramMap);

    /**
     * 存储对应码值类型新增结点
     *
     * @param paramMap 新增参数
     */
    void saveIter (Map<String, Object> paramMap);

    void saveIterCorpId(Map<String, Object> paramMap);

    /**
     * 修改对应码值类型新增结点
     *
     * @param paramMap 修改参数
     */
    void updateIter (Map<String, Object> paramMap);

    void updateIterCorpId(Map<String, Object> paramMap);

    /**
     * 删除对应码值类型新增结点
     *
     * @param paramMap 删除参数
     */
    void deleteIterBatch (Map<String, Object> paramMap);

    /**
     * 启动或停用码值
     *
     * @param paramMap 码值标识集合
     */
    void stopOrStartIterBatch(Map<String, Object> paramMap);

    /**
     * 导出码值第一个sheet页信息
     *
     * @param paramMap 码值标识集合
     * @return
     */
    List<Map<String, Object>> selectSheet1(Map<String, Object> paramMap);

    /**
     * 导出迭代/展平码表信息
     *
     * @param mapList
     * @return
     */
    List<Map<String, Object>> selectSheetRecOrCommon(List<Map<String, Object>> mapList);


    /**
     *批量更新码值
     *
     * @param paramMap 导入存在的码值标识集合与表名
     */
    void updateBatch(Map<String, Object> paramMap);

    /**
     * 批量插入码值
     *
     * @param paramMap 导入的数据
     */
    void insertBatch(Map<String, Object> paramMap);

    /**
     * 查询所有码值类型
     *
     * @return
     */
    List<Map<String, Object>>  selectAllAppAndBuss();

    /**
     * 查询所有码值标识
     *
     * @return
     */
    List<Map<String, Object>>  selectAllCodeId(Map<String, Object> paramMap);

    /**
     * 批量修改码值详细信息
     *
     * @param paramMap 修改参数
     */
    void updateResOrComBatch(Map<String, Object> paramMap);

    void updateResOrComBatchCorpId(Map<String, Object> paramMap);

    /**
     * 批量插入码值详细信息
     *
     * @param paramMap 新增参数
     */
    void insertResOrComBatch(Map<String, Object> paramMap);

    void insertResOrComBatchCorpId(Map<String, Object> paramMap);

    /**
     * 根据约束查询码值标识
     *
     * @param paramMap
     * @return
     */
    Map<String, Object> selectCodeIdBYConstiaints(Map<String, Object> paramMap);

    String selTabType(Map<String, Object> paramMap);

    List<Map<String, Object>> queryUniqueFlag(Map<String, Object> paramMap);

    List<Map<String, Object>> selectByCorpPage(Map<String, Object> paramMap);

    List<Map<String, Object>> selCorpListByUserId(Map<String, Object> paramMap);

    List<String> queryCodeTab();

}
